package com.example.javaee.controller;

import com.example.javaee.entity.Employee;
import com.example.javaee.mapper.EmployeeMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

// 声明这是一个Spring Boot的REST控制器，返回数据会自动转为JSON格式
@RestController
// 定义这个控制器的基础请求路径为/api/employees
@RequestMapping("/api/employees")
// 允许来自http://localhost:5173的跨域请求，允许携带认证信息，并允许所有请求头
@CrossOrigin(origins = "http://localhost:5173", allowCredentials = "true", allowedHeaders = "*")
public class EmployeeController {

    // 自动注入EmployeeMapper（员工数据访问对象）
    @Autowired
    private EmployeeMapper employeeMapper;

    // 处理GET /api/employees请求，获取所有员工列表
    @GetMapping("")
    public List<Employee> getAllEmployees() {
        try {
            // 调用employeeMapper的findAll方法查询所有员工
            List<Employee> employees = employeeMapper.findAll();
            // 打印获取到的员工数量（用于调试）
            System.out.println("获取到的员工数量: " + (employees != null ? employees.size() : 0));
            return employees;
        } catch (Exception e) {
            // 打印异常堆栈信息
            e.printStackTrace();
            // 重新抛出异常
            throw e;
        }
    }

    // 处理GET /api/employees/search请求，根据关键词搜索员工
    @GetMapping("/search")
    public List<Employee> searchEmployees(@RequestParam String keyword) {
        // 调用employeeMapper的search方法，传入关键词进行搜索
        return employeeMapper.search(keyword);
    }

    // 处理POST /api/employees请求，添加新员工
    @PostMapping
    public Map<String, Object> addEmployee(@RequestBody Employee employee) {
        // 创建返回结果的Map对象
        Map<String, Object> response = new HashMap<>();
        try {
            // 调用employeeMapper的insert方法插入员工数据
            int result = employeeMapper.insert(employee);
            // 根据操作结果设置返回信息
            response.put("success", result > 0);
            response.put("message", result > 0 ? "添加成功" : "添加失败");
        } catch (Exception e) {
            // 如果出现异常，返回错误信息
            response.put("success", false);
            response.put("message", "添加失败：" + e.getMessage());
        }
        return response;
    }

    // 处理PUT /api/employees/{id}请求，更新指定ID的员工信息
    @PutMapping("/{id}")
    public Map<String, Object> updateEmployee(@PathVariable String id, @RequestBody Employee employee) {
        // 创建返回结果的Map对象
        Map<String, Object> response = new HashMap<>();
        try {
            // 设置员工的ID（从路径参数获取）
            employee.set员工工号(id);
            // 调用employeeMapper的update方法更新员工信息
            int result = employeeMapper.update(employee);
            // 根据操作结果设置返回信息
            response.put("success", result > 0);
            response.put("message", result > 0 ? "更新成功" : "更新失败");
        } catch (Exception e) {
            // 如果出现异常，返回错误信息
            response.put("success", false);
            response.put("message", "更新失败：" + e.getMessage());
        }
        return response;
    }

    // 处理DELETE /api/employees/{id}请求，删除指定ID的员工
    @DeleteMapping("/{id}")
    public Map<String, Object> deleteEmployee(@PathVariable String id) {
        // 创建返回结果的Map对象
        Map<String, Object> response = new HashMap<>();
        try {
            // 调用employeeMapper的delete方法删除员工
            int result = employeeMapper.delete(id);
            // 根据操作结果设置返回信息
            response.put("success", result > 0);
            response.put("message", result > 0 ? "删除成功" : "删除失败");
        } catch (Exception e) {
            // 如果出现异常，返回错误信息
            response.put("success", false);
            response.put("message", "删除失败：" + e.getMessage());
        }
        return response;
    }
}